package com.j180.aspect;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;

@Component
@Aspect
public class MethodExcuteTime {


      //@Pointcut("execution( * com.j180.dao.impl.StudentDaoImpl.*(..))")
    @Pointcut("execution( * com.j180.*..*(..))")
    public void  myPointCut(){

      };

     // @Pointcut("execution(* com.*..*(..))")
      public void test(){

      }

    /*
    public: 方法的访问修饰符
      * ： 返回的所有的数据类型
    com.j180.dao.impl.StduentDaoImpl：全类名
    StduentDaoImpl.*：表示该类下的所有的方法
    StduentDaoImpl.*(..) : (..) 参数可有可无  (*)表示一个参数的，(*,*)两个，后面一次类推
     */
    //@Before("execution( * com.j180.dao.impl.StudentDaoImpl.*(..))")
    //@Before(value = "myPointCut()")
    public void methodBefore(JoinPoint joinPoint){
       // System.out.println(joinPoint.getTarget()+"的"+joinPoint.getSignature().getName()+"前给拦截到了");

       // System.out.println(joinPoint.getSignature().getName()+"前给拦截到了");
        System.out.println("前置通知======>>>>");


    }

   // @After("execution( * com.j180.dao.impl.StudentDaoImpl.*(..))")
    //@After("myPointCut()")
    public void  methodAfter(){

        System.out.println("后置通知======>>>");
    }
    //returning = "reVal"  返回值
   // @AfterReturning(value = "execution( * com.j180.dao.impl.StudentDaoImpl.*(..))",returning = "reVal")
    public void methodAfterReturning(Object reVal){

        System.out.println("返回值返回后通知=====>>>"+reVal);
    }

   // @Around("execution( * com.j180.dao.impl.StudentDaoImpl.*(..))")
    public  void MethodAround(ProceedingJoinPoint proceedingJoinPoint){

        System.out.println("环绕通知前----->>>");

         //调用拦截的方法
        try {
            Object obj =  proceedingJoinPoint.proceed();
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }

        System.out.println("环绕通知后----->>>");

    }
    //异常后通知
    @AfterThrowing("execution( * com.j180.dao.impl.StudentDaoImpl.*(..))")
    public  void menthodExcepation(){

        System.out.println("发送长生异常后执行的通知=======>>>");
    }


}
